<?php

namespace UFSW\FormBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use UFSW\DataBaseBundle\Entity\Torneo;
use UFSW\DataBaseBundle\Entity\Invitacion;
use UFSW\FormBundle\Form\InvitacionType;

class InvitacionController extends Controller
{
    /**
     * Vistas: son los archivos html a los que vamos a redireccionar repetidas veces
     */
    protected $indexVista;
    protected $verVista;
    protected $nuevoVista;
    protected $editarVista;
    
    public function __construct() {
        $this->indexVista = 'FormBundle:Invitacion:index.html.twig';
        $this->portadaVista = null;
        $this->verVista = 'FormBundle:Invitacion:show.html.twig';
        $this->nuevoVista = 'FormBundle:Invitacion:new.html.twig';
        $this->editarVista = 'FormBundle:Invitacion:edit.html.twig';
    }
    
    /**
     * Lists all Invitacion entities.
     *
     */
    public function indexAction()
    {
        $em = $this->getDoctrine()->getManager();

        $invitaciones = $em->getRepository('UFSWDataBaseBundle:Invitacion')->findAll();

        return $this->render($this->indexVista, array(
            'invitaciones' => $invitaciones,
        ));
    }
    /**
     * Creates a new Invitacion entity.
     *
     */
    public function createAction(Request $request,$id)
    {
        $em = $this->getDoctrine()->getManager();
        $torneo = $em->getRepository('UFSWDataBaseBundle:Torneo')->find($id);
        
        $invitacion = new Invitacion();
        $invitacion->setTorneo($torneo);
        
        $form = $this->createCreateForm($invitacion);
        $form->handleRequest($request);
        
        
        
        if ($form->isValid()) {
            $em->persist($invitacion);
            $em->flush();

            return $this->redirect($this->generateUrl('form_show', array('id' => $invitacion->getId())));
        }

        return $this->render($this->nuevoVista, array(
            'invitacion' => $invitacion,
            'form'   => $form->createView(),
        ));
    }

    /**
    * Creates a form to create a Invitacion entity.
    *
    * @param Torneo $invitacion The entity
    *
    * @return \Symfony\Component\Form\Form The form
    */
    private function createCreateForm(Invitacion $invitacion)
    {
        $form = $this->createForm(new InvitacionType(), $invitacion, array(
            'action' => $this->generateUrl('form_crear', array('id' => $invitacion->getTorneo()->getId())),
            'method' => 'POST',
        ));

        $form->add('submit', 'submit', array('label' => $this->get('translator')->trans('create')));

        return $form;
    }

    /**
     * Displays a form to create a new Invitacion entity.
     *
     */
    public function newAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $torneo = $em->getRepository('UFSWDataBaseBundle:Torneo')->find($id);
        
        $invitacion = new Invitacion();
        $invitacion->setTorneo($torneo);
        
        $form   = $this->createCreateForm($invitacion);

        return $this->render($this->nuevoVista, array(
            'invitacion' => $invitacion,
            'form'   => $form->createView(),
        ));
    }

    /**
     * Finds and displays a Invitacion entity.
     *
     */
    public function showAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $invitacion = $em->getRepository('UFSWDataBaseBundle:Invitacion')->find($id);

        if (!$invitacion) {
            throw $this->createNotFoundException('Unable to find Invitacion entity.');
        }

        return $this->render($this->verVista, array(
            'invitacion'      => $invitacion,
            ));
    }

    /**
     * Displays a form to edit an existing Invitacion entity.
     *
     */
    public function editAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $invitacion = $em->getRepository('UFSWDataBaseBundle:Torneo')->find($id);

        if (!$invitacion) {
            throw $this->createNotFoundException('Unable to find Invitacion entity.');
        }

        $editForm = $this->createEditForm($invitacion);

        return $this->render('FormBundle:Invitacion:edit.html.twig', array(
            'invitacion'      => $invitacion,
            'edit_form'   => $editForm->createView(),
        ));
    }

    /**
    * Creates a form to edit a Invitacion entity.
    *
    * @param Torneo $invitacion The entity
    *
    * @return \Symfony\Component\Form\Form The form
    */
    private function createEditForm(Torneo $invitacion)
    {
        $form = $this->createForm(new InvitacionType(), $invitacion, array(
            'action' => $this->generateUrl('torneo_update', array('id' => $invitacion->getId())),
            'method' => 'PUT',
        ));

        $form->add('submit', 'submit', array('label' => $this->get('translator')->trans('update')));

        return $form;
    }
    /**
     * Edits an existing Invitacion entity.
     *
     */
    public function updateAction(Request $request, $id)
    {
        $em = $this->getDoctrine()->getManager();

        $invitacion = $em->getRepository('UFSWDataBaseBundle:Torneo')->find($id);

        if (!$invitacion) {
            throw $this->createNotFoundException('Unable to find Invitacion entity.');
        }

        $editForm = $this->createEditForm($invitacion);
        $editForm->handleRequest($request);

        if ($editForm->isValid()) {
            $em->flush();

            return $this->redirect($this->generateUrl('torneo_edit', array('id' => $id)));
        }

        return $this->render('FormBundle:Invitacion:edit.html.twig', array(
            'invitacion'      => $invitacion,
            'edit_form'   => $editForm->createView(),
        ));
    }
}
